// 1.递归的写法
function dfs(node:Node) {
    // 终止条件： 节点已经访问过
    if(!node || node.visited === true){
        return;
    }
    // 访问当前节点
    node.visited = true;
    //  process current node
    // logic

    // 遍历子节点
    // 1.如果是二叉树，依次遍历node的子节点，
    dfs(node.left);
    dfs(node.right);
    
    // 2.如果是 多叉树 
    for(let nextNode of node.childNodes){
        if(node.visited === false){
            dfs(nextNode)
        }
    }
}

// 2. 非递归写法
function dfs1(node:Node) {
    if(!node){
        return 
    }
    const stack:Node[]=[node];
    while(stack.length){
        let tempNode = stack.pop();
        tempNode.visited = true;

        process(tempNode);

        let nodes:Node[] = generateRelatedNodes(tempNode);

        stack.push(...nodes)
    }
    // other process

}

